package com.odais.AE_Modifier;

import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.AlphaModifier;
import org.andengine.entity.modifier.EntityModifier;
import org.andengine.entity.modifier.LoopEntityModifier;
import org.andengine.entity.modifier.LoopEntityModifier.ILoopEntityModifierListener;
import org.andengine.entity.modifier.MoveByModifier;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.entity.modifier.ParallelEntityModifier;
import org.andengine.entity.modifier.ScaleModifier;
import org.andengine.entity.modifier.SequenceEntityModifier;
import org.andengine.util.modifier.IModifier;
import org.andengine.util.modifier.LoopModifier;

import android.content.Context;

public class BoxDropper extends EntityModifier
{
	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================
		Context context;

		IEntityModifierListener pEntityModifierListener;
		ILoopEntityModifierListener pLoopModifierListener;
		SequenceEntityModifier pEntityModifier;
		LoopEntityModifier entityModifier;
		private float pX, pY;
		private float mStartZoomFactor, mEndZoomFactor;

	// ===========================================================
	// Constructors
	// ===========================================================

		public BoxDropper(Context context, float startX, float startY, float pX, float pY, float startZoomFactor, float endZoomFactor, int animationNumber)
		{
			this.context = context;
			this.pX = pX;
			this.pY = pY;
			this.mStartZoomFactor = startZoomFactor;
			this.mEndZoomFactor = endZoomFactor;

			pEntityModifierListener = new IEntityModifierListener() {
				@Override
				public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) {
				}

				@Override
				public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {
				}
			};


			pLoopModifierListener = new ILoopEntityModifierListener() {
								@Override
								public void onLoopStarted(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {
								}

								@Override
								public void onLoopFinished(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {
								}
							};
							
							if(animationNumber == 0)
							{
								pEntityModifier = new SequenceEntityModifier(
													new ScaleModifier(0.2f, mStartZoomFactor, mEndZoomFactor)
												);
							}
							else if(animationNumber == 1)
							{
								pEntityModifier = new SequenceEntityModifier(
													new ScaleModifier(0.3f, mStartZoomFactor, 1.4f * mEndZoomFactor),
													new ScaleModifier(0.1f, 1.4f * mEndZoomFactor, 0.8f * mEndZoomFactor),
													new ScaleModifier(0.1f, 0.8f * mEndZoomFactor, mEndZoomFactor)
												);
							}
							//Simple translation for left area
							else if(animationNumber == 2)
							{
								pEntityModifier = new SequenceEntityModifier(
													new MoveModifier(0.4f, startX, startY, pX, pY)
													);
							}

			entityModifier = new LoopEntityModifier(pEntityModifierListener, 1, pLoopModifierListener, pEntityModifier);
		}



		// ===========================================================
		// Getter & Setter
		// ===========================================================


		// ===========================================================
		// Methods for/from SuperClass/Interfaces
		// ===========================================================


		@Override
		public LoopEntityModifier deepCopy()
				throws org.andengine.util.modifier.IModifier.DeepCopyNotSupportedException {
			return this.entityModifier.deepCopy();
		}



		@Override
		public float getDuration() {
			return 0;
		}



		@Override
		public float getSecondsElapsed() {
			return 0;
		}



		@Override
		public float onUpdate(float arg0, IEntity arg1) {
			return 0;
		}



		@Override
		public void reset() {
		}
}